繼上篇「[鐵人賽Day9]計算MySQL資料庫回傳資料筆數」
有提到mysql_num_rows函式,就在聯想什麼地方可以用到
頭一個想到的就是做分頁,那今天就做個PHP的簡易分頁吧
今天會用到的函式有這些(先前提過的不列出):ceil()、isset()、intval()
將在下面做功能說明,但讓我鋪下一篇的內容一下,所以isset()在此處暫時不解說
ceil():取得不小於值的下一個整數
使用方法:ceil ( float $value )
例如說:18/4=4.5,那經過ceil()就等於5
想實際操作看看的讀者可以把以下程式碼複製起來執行:
<?php
echo ceil(18/4);
?>
(參考資料:http://php.net/manual/en/function.ceil.php)
intval():使用指定的base做為轉換的基底(預設值為10),並回傳數值var的整數值,在物件不能使用此函式,不然會產生E_NOTICE錯誤並回傳1
使用方法:intval ( mixed $var )
(參考資料:http://php.net/manual/en/function.intval.php)
而今天運用這幾個函式,實作了一下PHP分頁的功能
資料庫名稱為:ithome_test
並建立資料表:good_idea
欄位有id(int(2))跟name(varchar(50))
實作程式碼如下(已寫註解說明):
「pages.php」
<?php
//資料庫連結
$conn=mysql_connect('127.0.0.1','root','') or die("Error");
mysql_select_db('ithome_test');
$sql = "SELECT * FROM `good_idea` ORDER BY `id`"; //修改成你要的 SQL 語法
$result = mysql_query($sql,$conn) or die("Error");
$data_nums = mysql_num_rows($result); //統計總比數
$per = 5; //每頁顯示項目數量
$pages = ceil($data_nums/$per); //取得不小於值的下一個整數
if (!isset($_GET["page"])){ //假如$_GET["page"]未設置
$page=1; //則在此設定起始頁數
} else {
$page = intval($_GET["page"]); //確認頁數只能夠是數值資料
}
$start = ($page-1)*$per; //每一頁開始的資料序號
$result = mysql_query($sql.' LIMIT '.$start.', '.$per,$conn) or die("Error");
?>
<table>
<tr>
<td style="text-align: center;">編號</td>
<td style="text-align: center;">姓名</td>
</tr>
<?php
//輸出資料內容
while ($row = mysql_fetch_array ($result))
{
$id=$row['id'];
$name=$row['name'];
?>
<tr>
<td style="text-align: center;"><?php echo $id; ?></td>
<td style="text-align: center;"><?php echo $name; ?></td>
</tr>
<?php
}
?>
</table>
<br />
<?php
//分頁頁碼
echo '共 '.$data_nums.' 筆-在 '.$page.' 頁-共 '.$pages.' 頁';
echo "<br /><a href=?page=1>首頁</a> ";
echo "第 ";
for( $i=1 ; $i<=$pages ; $i++ ) {
if ( $page-3 < $i && $i < $page+3 ) {
echo "<a href=?page=".$i.">".$i."</a> ";
}
}
echo " 頁 <a href=?page=".$pages.">末頁</a><br /><br />";
?>
謝謝大大分享!
目前正在寫分頁這個功能,google 搜尋您是第一筆,讚!
謝謝您的觀看與鼓勵
不介意小弟分享的技術短淺的話(真的完全沒有深度...(默))
歡迎來我的部落格參觀一下,技術交流
OS隨手筆記
http://www.dotblogs.com.tw/jhsiao/
Old Siao大大,哇哇,現在看到,才回想起來...當年您的文章,讓小弟獲益良多。
今年,您的老蕭咖啡館...每天都在追啊XD
感謝大大的教學
http://ithelp.ithome.com.tw/articles/10189198
我有順便把大大的作成物件導向了
PS~因為我算是全端美工 所已程式碼比較沒有系統化唷
剛看了您寫的文章,真的很棒
各個地方都很清楚的說明了出來呢
我也是前後端的全端攻城師歡迎一起交流唷
其實以前本職是畫3D的就是了...![/images/emoticon/emoticon10.gif]
(/images/emoticon/emoticon10.gif)
我也在IT幫學習了很多就是了
這個可以用兩個sql語法嗎
抓取資料時,使用SQL JOIN語法吧
參考資料:
JOIN 連接 (SQL JOIN)
https://www.fooish.com/sql/join.html
你好 我目前使用php7來撰寫
但發現
$result = mysqli_query($sql.' LIMIT '.$start.', '.$per,$conn) or die("Error");
錯誤了
可以請教問題以及這句的用法為何呢?
請問可否提供一下錯誤訊息呢?
謝謝
Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\picture.php on line 32
Error
你好 他目前就是出現錯誤的樣子 但是其他code沒出現問題
這段是我顯示資料的code 麻煩您了 謝謝
另外想請教寫兩個$result不會有衝突問題嗎
我這篇時間已久,是使用mysql語法版本,目前PHP版本皆改為使用mysqli的語法唷
可參考以下討論連結:https://stackoverflow.com/questions/26639619/warning-mysqli-query-expects-parameter-1-to-be-mysqli-string-given-in
$conn = mysqli_connect("localhost","username","password","dbname");
$sql = "Select * FROM ...";
$result = mysqli_query($conn, $sql);
寫兩個$result不會衝突啊,只是因為變數都一樣,後者會把前者給取代掉
要兩個都留,就把變數調整為不一樣吧,EX:$result2
那請問 第二個 $result 中放入 LIMIT的作用是什麼呢?
第幾筆資料開始後取幾筆資料
這篇網友寫的文章紀錄可以看一下唷
http://bjstation.pixnet.net/blog/post/30083625-%5Bsql%5D-limit-%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95
您好
想請問大大,大大寫的
$pages = ceil($data_nums/$per); //取得不小於值的下一個整數
if (!isset($_GET["page"])){ //假如$_GET["page"]未設置
$page=1; //則在此設定起始頁數
} else {
$page = intval($_GET["page"]); //確認頁數只能夠是數值資料
}
裡面的page是從何得到的,有點看不懂
if (!isset($_GET["page"])){ //假如$_GET["page"]未設置
$page=1; //則在此設定起始頁數
}
//假如$_GET["page"]未設置
則為第一頁(起始頁數)
而下方有段
<?php
//分頁頁碼
echo '共 '.$data_nums.' 筆-在 '.$page.' 頁-共 '.$pages.' 頁';
echo "<br /><a href=?page=1>首頁</a> ";
echo "第 ";
for( $i=1 ; $i<=$pages ; $i++ ) {
if ( $page-3 < $i && $i < $page+3 ) {
echo "<a href=?page=".$i.">".$i."</a> ";
}
}
echo " 頁 <a href=?page=".$pages.">末頁</a><br /><br />";
?>
其中有段
echo " 頁 <a href=?page=".$pages.">末頁
這裡面就有page參數
感謝大大細心講解